namespace DiLu.Expansion.DataStorage.Common.Columns;

/// <summary>
///     定义了具有主键的实体的基本接口。通过此接口，可以为任何实体设置或获取其主键值。
/// </summary>
/// <typeparam name="TPrimaryKeyType">表示主键类型的泛型参数。</typeparam>
/// <typeparam name="TModel">表示实现该接口的模型类型。</typeparam>
public interface IHasPrimaryKey<TPrimaryKeyType, out TModel>
{
    /// <summary>
    ///     获取或设置实体的主键值。
    /// </summary>
    public TPrimaryKeyType Id { get; set; }

    /// <summary>
    ///     生成主键值。
    /// </summary>
    /// <returns>返回生成的主键值，类型由泛型参数 TModel 指定。</returns>
    TModel GeneratePrimaryKey();
}